import { fileURLToPath, URL } from 'node:url'
import { dirname } from 'node:path'
import { resolve } from 'path'
import { terser } from 'rollup-plugin-terser'
import { defineConfig } from 'vite'
import eslintPlugin from '@nabla/vite-plugin-eslint'

const ____dirname = dirname(fileURLToPath(import.meta.url))

// https://vitejs.dev/config/
export default defineConfig({
    plugins: [
        // libInjectCss(),
        eslintPlugin(),
        terser({
            compress: {
                // drop_console: true, // 生产环境时移除console
                drop_debugger: true,
            },
            format: {
                comments: false, // 删除注释comments
            },
            mangle: {
                toplevel: true, // 混淆代码
            },
            warnings: true,
        }),
    ].filter(Boolean),
    resolve: {
        alias: {
            '@': fileURLToPath(new URL('./src', import.meta.url)),
        },
    },
    css: {
        preprocessorOptions: {
            less: {
                modifyVars: {
                    // 或者globalVars
                    themeColor: '#1677FF', // #1890FF
                },
                javascriptEnabled: true,
            },
        },
    },
    server: {
        port: 7855, // 你需要定义的端口号
        open: true, // open支持boolean/string类型，为true时打开默认浏览器，为string类型时，打开指定浏览器，具体查看官网即可
        proxy: {
            // 配置本地代理地址
            // '/api': 'http://foison.sf-express.com/api'
        },
    },
    // 构建为库
    build: {
        cssCodeSplit: true,
        // cssTarget: 'es',
        lib: {
            // 构建为库。如果指定了 build.lib，build.cssCodeSplit 会默认为 false。
            entry: resolve(____dirname, 'packages/index.js'), // entry是必需的，因为库不能使用HTML作为入口。
            name: 'ui', // 暴露的全局变量
            fileName: 'ui', // 输出的包文件名，默认是package.json的name选项
        },
        rollupOptions: {
            // 自定义底层的Rollup打包配置
            // https://rollupjs.org/configuration-options/
            // 确保外部化处理那些你不想打包进库的依赖
            external: ['d3-selection'],
            output: {
                // format: 'es', // 默认es，可选 'amd' 'cjs' 'es' 'iife' 'umd' 'system'
                exports: 'named', // https://rollupjs.org/configuration-options/#output-exports
                //   // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量

                globals: {},
            },
        },
        /** 设置为 false 可以禁用最小化混淆，或是用来指定使用哪种混淆器。
        默认为 Esbuild，它比 terser 快 20-40 倍，压缩率只差 1%-2%。
        注意，在 lib 模式下使用 'es' 时，build.minify 选项不会缩减空格，因为会移除掉 pure 标注，导致破坏 tree-shaking。
        当设置为 'terser' 时必须先安装 Terser。（yarn add terser -D）
    */
        minify: true, // Vite 2.6.x 以上需要配置 minify: "terser", terserOptions 才能生效
        // terserOptions: {
        //     // 在打包代码时移除 console、debugger 和 注释
        //     compress: {
        //         drop_console: true, // 生产环境时移除console
        //         drop_debugger: true,
        //     },
        //     format: {
        //         comments: false, // 删除注释comments
        //     },
        //     mangle: {
        //         toplevel: true // 混淆代码
        //     },
        // },
    },
})
